package gui.standard.form;

import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import model.tablemodel.PopisniDokumentTableModel;
import net.miginfocom.swing.MigLayout;
import util.components.JDigitsTextField;
import util.components.JLimitedTextField;
import actions.standard.form.ProknjiziPopisAction;
import actions.standard.form.ZoomFormAction;

public class PopisniDokumentForm extends StandardForm {

	private static final long serialVersionUID = 1L;
	private JDigitsTextField tfIdKomisije;
	private JDigitsTextField tfPoslovnaGodina;
	private JLimitedTextField tfSifraPreduzeca;
	private JLimitedTextField tfSifraSektora;
	private JLimitedTextField tfSifraMagacina;
	private JDigitsTextField tfRedniBrojPopisa;
	private JTextField tfDatumPopisa;
	private JLimitedTextField tfStatus;

	private JButton bPopisnaKomisijaZoom;
	private JButton bPoslovnaGodinaZoom;
	private JButton bMagacinZoom;
	private JButton btnProknjizi;
	
	public PopisniDokumentForm() {

	}
	
	@Override
	public void init(){
		
		super.init();
		
		tfIdKomisije = new JDigitsTextField(7, 7, true, true);
		tfPoslovnaGodina = new JDigitsTextField(4, 4, false, false);
		tfSifraPreduzeca = new JLimitedTextField(12, 12, true);
		tfSifraSektora = new JLimitedTextField(12, 12, true);
		tfSifraMagacina = new JLimitedTextField(12, 12, true);
		tfRedniBrojPopisa = new JDigitsTextField(10, 10, true, false);
		tfDatumPopisa = new JTextField(12);
		tfStatus = new JLimitedTextField(1, 1, true);
		
		setTitle("Popisni dokument");
		
		tableModel = new PopisniDokumentTableModel(
				new String[] { "ID komisije", "Poslovna godina", "Sifra preduzeca",
						"Sifra sektora", "Sifra magacina", "Redni broj popisa",
						"Datum popisa", "Status" }, 0);
		
		tblGrid.setModel(tableModel);
		
		bPopisnaKomisijaZoom = new JButton(new ZoomFormAction(this,
				new PopisnaKomisijaForm()));
		bPoslovnaGodinaZoom = new JButton(new ZoomFormAction(this,
				new PoslovnaGodinaForm()));
		bMagacinZoom = new JButton(new ZoomFormAction(this,
				new MagacinForm()));
		
		btnProknjizi = new JButton(new ProknjiziPopisAction(this));
		
		children.add(new StavkaPopisaForm());
		
		//dugmici za knjizenje i tako to
		buttonsPanel.add(btnProknjizi);

		JPanel bottomPanel = new JPanel();
		bottomPanel.setLayout(new MigLayout("fillx"));
		JPanel dataPanel = new JPanel();
		dataPanel.setLayout(new MigLayout("gapx 15px"));

		JLabel lblIdKomisije = new JLabel("ID komisije:");
		JLabel lblPoslovnaGodina = new JLabel("Poslovna godina:");
		JLabel lblSifraPreduzeca = new JLabel("Sifra preduzeca:");
		JLabel lblSifraSektora = new JLabel("Sifra sektora:");
		JLabel lblSifraMagacina = new JLabel("Sifra magacina:");
		JLabel lblRedniBrojPopisa = new JLabel("Redni broj popisa:");
		JLabel lblDatumPopisa = new JLabel("Datum popisa:");
		JLabel lblStatus = new JLabel("Status:");

		dataPanel.add(lblIdKomisije);
		dataPanel.add(tfIdKomisije);
		dataPanel.add(bPopisnaKomisijaZoom, "wrap");
		dataPanel.add(lblPoslovnaGodina);
		dataPanel.add(tfPoslovnaGodina, "pushx");
		dataPanel.add(lblSifraPreduzeca);
		dataPanel.add(tfSifraPreduzeca);
		dataPanel.add(bPoslovnaGodinaZoom, "wrap");
		dataPanel.add(lblSifraSektora);
		dataPanel.add(tfSifraSektora, "pushx");
		dataPanel.add(lblSifraMagacina);
		dataPanel.add(tfSifraMagacina);
		dataPanel.add(bMagacinZoom, "wrap");
		dataPanel.add(lblRedniBrojPopisa);
		dataPanel.add(tfRedniBrojPopisa, "pushx");
		dataPanel.add(lblDatumPopisa);
		dataPanel.add(tfDatumPopisa, "wrap");
		dataPanel.add(lblStatus);
		dataPanel.add(tfStatus, "pushx");
		bottomPanel.add(dataPanel);

		bottomPanel.add(buttonsPanel, "dock east");

		add(bottomPanel, "grow, wrap");
	}

	@Override
	public void sync() {
		// TODO Auto-generated method stub
		int index = tblGrid.getSelectedRow();
		if (index < 0) {
			tfIdKomisije.setText("");
			tfPoslovnaGodina.setText("");
			tfSifraPreduzeca.setText("");
			tfSifraSektora.setText("");
			tfSifraMagacina.setText("");
			tfRedniBrojPopisa.setText("");
			tfDatumPopisa.setText("");
			tfStatus.setText("");
			return;
		}
		String idKomisije = (String) tableModel.getValueAt(index, 0);
		String poslovnaGodina = (String) tableModel.getValueAt(index, 1);
		String sifraPreduzeca = (String) tableModel.getValueAt(index, 2);
		String sifraSektora = (String) tableModel.getValueAt(index, 3);
		String sifraMagacina = (String) tableModel.getValueAt(index, 4);
		String redniBrojPopisa = (String) tableModel.getValueAt(index, 5);
		String datumPopisa = (String) tableModel.getValueAt(index, 6);
		String status = (String) tableModel.getValueAt(index, 7);

		tfIdKomisije.setText(idKomisije);
		tfPoslovnaGodina.setText(poslovnaGodina);
		tfSifraPreduzeca.setText(sifraPreduzeca);
		tfSifraSektora.setText(sifraSektora);
		tfSifraMagacina.setText(sifraMagacina);
		tfRedniBrojPopisa.setText(redniBrojPopisa);
		tfDatumPopisa.setText(datumPopisa);
		tfStatus.setText(status);

		setMode(StandardForm.MODE_EDIT);

	}

	@Override
	public void addRow() {
		// TODO Auto-generated method stub
		String idKomisije = tfIdKomisije.getText().trim();
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String sifraSektora = tfSifraSektora.getText().trim();
		String sifraMagacina = tfSifraMagacina.getText().trim();
		String redniBrojPopisa = tfRedniBrojPopisa.getText().trim();
		String datumPopisa = tfDatumPopisa.getText().trim();
		String status = tfStatus.getText().trim();
		try {
			int index = tableModel.insertRow(new String[] { idKomisije,
					poslovnaGodina, sifraPreduzeca, sifraSektora,
					sifraMagacina, redniBrojPopisa, datumPopisa, status });
			tblGrid.setRowSelectionInterval(index, index);
			setMode(MODE_ADD);
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public void searchRow() {
		// TODO Auto-generated method stub
		String idKomisije = tfIdKomisije.getText().trim();
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String sifraSektora = tfSifraSektora.getText().trim();
		String sifraMagacina = tfSifraMagacina.getText().trim();
		String redniBrojPopisa = tfRedniBrojPopisa.getText().trim();
		String datumPopisa = tfDatumPopisa.getText().trim();
		String status = tfStatus.getText().trim();
		try {
			tableModel.searchRows(new String[] { idKomisije, poslovnaGodina,
					sifraPreduzeca, sifraSektora, sifraMagacina,
					redniBrojPopisa, datumPopisa, status });
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public void editRow() {
		// TODO Auto-generated method stub
		String idKomisije = tfIdKomisije.getText().trim();
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String sifraSektora = tfSifraSektora.getText().trim();
		String sifraMagacina = tfSifraMagacina.getText().trim();
		String redniBrojPopisa = tfRedniBrojPopisa.getText().trim();
		String datumPopisa = tfDatumPopisa.getText().trim();
		String status = tfStatus.getText().trim();
		try {
			int index = tableModel.editRow(new String[] { idKomisije,
					poslovnaGodina, sifraPreduzeca, sifraSektora,
					sifraMagacina, redniBrojPopisa, datumPopisa, status },
					tblGrid.getSelectedRow());
			tblGrid.setRowSelectionInterval(index, index);
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public void setMode(int mode) {
		super.setMode(mode);

		if (mode != StandardForm.MODE_ADD)
			return;

		tfIdKomisije.setText("");
		tfPoslovnaGodina.setText("");
		tfSifraPreduzeca.setText("");
		tfSifraSektora.setText("");
		tfSifraMagacina.setText("");
		tfRedniBrojPopisa.setText("");
		tfDatumPopisa.setText("");
		tfStatus.setText("");
	}

	public void proknjiziPopis() {
		try {
			((PopisniDokumentTableModel)tableModel).proknjiziPopisniDokument(tblGrid.getSelectedRow());
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}


	@Override
	public String[] getSelectedRowKeys() {
		// TODO Auto-generated method stub
		return new String[]{tfIdKomisije.getText().trim(), tfPoslovnaGodina.getText().trim(), tfSifraPreduzeca.getText().trim(), 
				tfSifraSektora.getText().trim(), tfSifraMagacina.getText().trim(), tfRedniBrojPopisa.getText().trim(), 
				tfDatumPopisa.getText().trim()};
	}

	@Override
	public void getZoomedCol(String[] keys, StandardForm form) {
		// TODO Auto-generated method stub
		if(form instanceof PopisnaKomisijaForm){
			tfIdKomisije.setText(keys[0]);
		}else if(form instanceof PoslovnaGodinaForm){
			tfSifraPreduzeca.setText(keys[0]);
			tfPoslovnaGodina.setText(keys[1]);
		}else if(form instanceof MagacinForm){
			tfSifraPreduzeca.setText(keys[0]);
			tfSifraSektora.setText(keys[1]);
			tfSifraMagacina.setText(keys[2]);
		}
	}

	@Override
	public String[] getSelectedRowNextKeys(int index) {
		// TODO Auto-generated method stub
		return new String[]{tfSifraPreduzeca.getText().trim(), tfSifraSektora.getText().trim(), 
				tfIdKomisije.getText().trim(), tfPoslovnaGodina.getText().trim(), tfSifraMagacina.getText().trim(), tfRedniBrojPopisa.getText().trim(), 
				tfDatumPopisa.getText().trim(), "", "", "", "", ""};
	}

}
